package JVM.第03篇_运行时内存篇;

/**
 * 局部变量压栈指令将给定的局部变品表中的数据压入操作数栈。
 *
 * 操作数栈(Operand Stack)
 * ●我们说Java虚拟机的解释引擎是基于栈的执行引擎，其中的栈指的就是操作数栈。
 * ●每一个独立的栈帧中除了包含局部变量表以外，还包含一个后进先出(Last-In-First-Out)的操作数栈，
 * 也可以称之为表达式栈(Expression Stack)。
 * ●操作数栈就是JVM执行引擎的一个工作区，当一个方法刚开始执行的时候，
 * 一个新的栈帧也会随之被创建出来，这个方法的操作数栈是空的。
 * ●每一个操作数栈都会拥有一个明确的栈深度用于存储数值，其所需的最大深度在编译期就定义好了，
 * 保存在方法的Code属性中，为max_stack的值。
 * ●栈中的任何一个元素都是可以任意的Java数据类型。
 *          ●32bit的类型占用一个栈单位深度
 *          ●64bit的类 型占用两个栈单位深度  //如double和long
 * ●操作数栈，在方法执行过程中，根据字节码指令，
 * 并非采用访问索引的方式来进行数据访问的，而是只能通过标准的入栈(push) 和出栈(pop)操作，
 * 往栈中写入数据或提取数据来完成一次数据访问。
 *      ●某些字节码指令将值压入操作数栈，其余的字节码指令将操作数取出栈
 *      便用它们后再把结果压入栈。比如:执行复制、交换、求和等操作
 * ●如果被调用的方法带 有返回值的话，其返回值将会被压入 当前栈帧的操作数栈中， 并
 *
 * 何为栈顶缓存技术?
 * 前面提过，基于栈式架构的虚拟机所使用的零地址指令更加紧凑，
 * 但完成一项操作的时候必然需要使用更多的入栈和出栈指令，
 * 这同时也就意味着将需要更多的指令分派(instruction dispatch) 次数和内存读/写次数。
 * 由于操作数是存储在内存中的，因此频繁地执行内存读/写操作必然会影响执行速度。
 * 为了解决这个问题，HotSpot JVM的设计者们提出了栈顶缓存(ToS, Top-of-Stack Cashing)技术，
 * 将栈顶元素全部缓存在物理CPU的寄存器中，以此降低对内存的读/写次数，提升执行引擎的执行效率。
 *
 */
public class C2_操作数栈 {

}
